// 隔板法
// 1. 求线性不定方程的整数解的组数
// 2. 求相同元素分组的方案数
// 测试链接 ：https://www.luogu.com.cn/problem/P1771
// 相关帖子 ：https://www.cnblogs.com/dx123/p/16782224.html
// 相关帖子 ：https://oi-wiki.org/math/combinatorics/combination/#%E6%8F%92%E6%9D%BF%E6%B3%95
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 150, P = 1000;
int C[1000][100][MAXN];

int quickPow(int a, int b)
{
    int ans = 1;
    while(b)
    {
        if(b & 1) ans = ans * a % P;
        a = a * a % P;
        b >>= 1;
    }
    return ans;
}

void add(int* c, int* a, int* b)
{
    for(int i = 0; i < MAXN; ++i)
    {
        c[i] += a[i] + b[i];
        c[i + 1] += c[i] / 10;
        c[i] %= 10;
    }
}

void getC(int n, int k)
{
    for(int i = 0; i < n; ++i)
    {
        for(int j = 0; j <= i && j < k; ++j)
        {
            if(j == 0) C[i][j][0] = 1;
            else add(C[i][j], C[i - 1][j], C[i - 1][j - 1]);
        }
    }
}

int main()
{
    int k, x;
    scanf("%d%d", &k, &x);
    int n = quickPow(x % P, x);
    getC(n, k);
    int i = MAXN - 1;
    while(C[n - 1][k - 1][i] == 0) --i;
    while(i >= 0) printf("%d", C[n - 1][k - 1][i--]);

    return 0;
}